Skip to content

Comments

Prevent cancellation of initialize request per MCP spec#1350

Open
Copilot wants to merge 2 commits intomainfrom
copilot/fix-initialize-cancellation-handling
Open

Prevent cancellation of initialize request per MCP spec#1350
Copilot wants to merge 2 commits intomainfrom
copilot/fix-initialize-cancellation-handling

Conversation

Copy link
Contributor

Copilot AI commented Feb 21, 2026

Per the MCP spec (cancellation.mdx, behavior requirement #2): "The initialize request MUST NOT be cancelled by clients."

Changes

Client side (McpSessionHandler.SendRequestAsync): Skip RegisterCancellation when the request method is initialize, so no notifications/cancelled notification is sent even if the cancellation token fires (e.g., from timeout).

Server side (McpSessionHandler.ProcessMessagesAsync): Don't store the initialize request in _handlingRequests, so incoming cancellation notifications can't cancel the initialize handler.

Tests

  • InitializeTimeout_DoesNotSendCancellationNotification: Verifies the client doesn't send a cancellation notification when initialize times out.
  • Server_IgnoresCancellationNotificationForInitializeRequest: Verifies the server ignores a cancellation notification targeting the initialize request and still responds successfully.

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

Per MCP spec: "The initialize request MUST NOT be cancelled by clients"

Client side: Skip RegisterCancellation in SendRequestAsync for initialize
requests so that no notifications/cancelled is sent even if the
cancellation token fires (e.g. from timeout).

Server side: Don't store initialize request in _handlingRequests so
incoming cancellation notifications can't cancel it.

Added tests for both behaviors.

Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
@stephentoub
Copy link
Contributor

@copilot fix the pr title and description

@stephentoub stephentoub marked this pull request as ready for review February 21, 2026 20:20
@stephentoub stephentoub requested a review from halter73 February 21, 2026 20:21
Copy link
Contributor Author

Copilot AI commented Feb 21, 2026

@copilot fix the pr title and description

Updated the PR description. I'm unable to update the PR title through my available tools — could you update it to "Prevent cancellation of initialize request per MCP spec"?

Copilot AI changed the title [WIP] Fix initialize cancellation handling based on MCP spec Prevent cancellation of initialize request per MCP spec Feb 21, 2026
@stephentoub stephentoub added this to the 1.0.0 (GA) milestone Feb 22, 2026
@jeffhandley jeffhandley requested review from Copilot and removed request for halter73 and stephentoub February 23, 2026 07:07
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request implements MCP specification compliance for preventing cancellation of the initialize request. Per the MCP spec (cancellation.mdx, behavior requirement #2), "The initialize request MUST NOT be cancelled by clients." The PR correctly implements this requirement on both the client and server sides.

Changes:

  • Client-side: Modified McpSessionHandler.SendRequestAsync to skip registering cancellation callbacks for the initialize request method, preventing cancellation notifications from being sent
  • Server-side: Modified McpSessionHandler.ProcessMessagesCoreAsync to exclude initialize requests from the _handlingRequests tracking dictionary, preventing incoming cancellation notifications from canceling the initialize handler
  • Tests: Added two comprehensive tests to verify both client-side and server-side behavior

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
src/ModelContextProtocol.Core/McpSessionHandler.cs Implements spec-compliant initialize request handling by skipping cancellation registration on client side (line 539) and excluding from tracking on server side (lines 199-202)
tests/ModelContextProtocol.Tests/Protocol/CancellationTests.cs Adds InitializeTimeout_DoesNotSendCancellationNotification test to verify client doesn't send cancellation notification when initialize times out
tests/ModelContextProtocol.Tests/Server/McpServerTests.cs Adds Server_IgnoresCancellationNotificationForInitializeRequest test to verify server ignores cancellation notifications for initialize requests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants